//
// Created by francklinson on 2021/5/28.
//

//两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
//
//计算一个数组中，任意两个数之间汉明距离的总和。
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    int totalHammingDistance(vector<int> &nums) {
        int ans = 0, n = nums.size();
        for (int i = 0; i < 30; ++i) {
            int c = 0;
            for (int val : nums) {
                c += (val >> i) & 1;// 统计所有数字 在第i位的1 和 0
            }
            ans += c * (n - c);  // 1 和 0 的数量相乘 为这一位的贡献
        }
        return ans;

    }

};

int main() {
    vector<int> v{4, 12, 2};
    Solution sol;
    cout << sol.totalHammingDistance(v) << endl;
    return 0;
}